package plus;

import plus.exp.Exp;

/**
 * This is the interface that represents a "sense" of a function. In other
 * words, one particular definition given one particular set of (frequently
 * inferred) input types.
 * 
 * Searches for applicable functions will rely on name (elsewhere), arity
 * (which should be made available here), and I further expect to be able to
 * make interesting and useful comparisons against the types in the signature.
 * 
 * That means the signature needs to be exposed, at least minimally. Ideally
 * a client should be able to get the entire "arrow" type, or so I might think.
 * 
 * @author me
 *
 */
public interface Function {
	int arity();
	S_Function arrow();
	void compileCall(Exp[] es); // The function supplies the calling convention.
}
